//
//  XSQTabBar.swift
//  WeiBo
//
//  Created by 许世强 on 2017/3/26.
//  Copyright © 2017年 许世强. All rights reserved.
//

import UIKit

//第一种方式: 使用代理  代理协议继承自基协议NSObjectProtocol
protocol XSQTabBarDelegate:NSObjectProtocol{

    //代理方法
    func didSeletedComposeButton()
}

class XSQTabBar: UITabBar {
    
    //懒加载控件
    lazy var composeButton: UIButton = {
        
        let button = UIButton()
        
        //设置不同状态的背景图片
        button.setBackgroundImage(UIImage(named:"tabbar_compose_button_highlighted"), for: .highlighted)
        
        button.setBackgroundImage(UIImage(named:"tabbar_compose_button"), for: .normal)
        
        //设置不同状态的图片
        button.setImage(UIImage(named:"tabbar_compose_icon_add"), for: .normal)
        
        button.setImage(UIImage(named:"tabbar_compose_icon_add_highlighted"), for: .highlighted)
        
        //根据内容设置大小
        button.sizeToFit()
        
        //添加button的点击事件
        button.addTarget(self, action: #selector(composeButtonAction), for: .touchUpInside)
        
        return button
        
    }()
    
    //定义代理对象属性   设置为可选类型,因为不是在这里设置值,是外外界设置值
    //设置为weak(弱引用),要在代理协议要继承自NSObjectProtocol基协议的基础上,否则会报错
    weak var xsqDelegate:XSQTabBarDelegate?
    
    
    override init(frame: CGRect) {
        
        super.init(frame: frame)
        
        setupUI()
    }
    
    //加载xib或者sb会调用
    required init?(coder aDecoder: NSCoder) {
        
        fatalError("init(coder:) has not been implemented")
    
    }
    
    //给当前self添加子视图控件
    func setupUI(){
       
        self.backgroundImage = UIImage(named:"tabbar_background")
        
        self.addSubview(composeButton)
    }

    //实现点击事件
    func composeButtonAction(){
       
        //要让Main控制器(继承自tabBarController的控制器)弹出一个控制器
        xsqDelegate?.didSeletedComposeButton()
   
    }
    
    //调整子控件布局 重写
    override func layoutSubviews() {
        
        super.layoutSubviews()
        
        composeButton.centX = width * 0.5
        
        composeButton.centY = height * 0.5
        
        //计算每一个按钮的宽度
        let itemWidth: CGFloat = width / 5
        
        var index = 0
        
        //遍历tabBar的子按钮,查找符合设置宽度的视图
        for subView in subviews{
        
            if subView.isKind(of:NSClassFromString("UITabBarButton")!){
            
                subView.width = itemWidth
                
                subView.x = CGFloat(index) * itemWidth;
            
                index += 1
                
                if index == 2 {
                    
                    index += 1
                }
            }
        }
    }
}

























